Package Main

Source Code of Main.MainProgram

package Main;

import java.io.File;
import java.io.IOException;
import java.util.Collection;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

import BusinessObjects.Activity;
import BusinessObjects.Avis;
import BusinessObjects.User;
import Parsers.ActivityParser;
import Parsers.AvisParser;
import Parsers.UserParser;

public class MainProgram {
  public static final String inputFolder = "InputDataFolder";
  public static final String userOperations = "userOperations.xml";
  public static final String activitiesOperations = "activitiesOperations.xml";
  public static final String avisOperations = "avisOperations.xml";

  public static final String outputFolder = "SaveDataFolder";
  public static final String database = "database.xml";
 
  public static final String viewFolder = "view";
  public static final String activiteXSLT = "page-activite.xsl";
  public static final String userXSLT = "page-utilisateur.xsl";

  private Collection<User> usersToCreate;
  private Collection<Activity> activitiesToCreate;
  private Collection<Avis> avisToCreate;

  private Collection<String> usersToDelete;
  private Collection<String> activitiesToDelete;
  private Collection<String> avisToDelete;

 
  public static void main(String[] args) {
   
    MainProgram main = new MainProgram();
   
    main.loadFromOperationsFiles();
   
    main.saveToDatabaseFile();
   
    main.parseWithXSLT();
  }
 
  //Charge les données depuis les fichiers XML avec SAX
  public void loadFromOperationsFiles() {
    SAXParserFactory factory = SAXParserFactory.newInstance();

    // Utilisation des namespace
    factory.setNamespaceAware(true);
    // TODO Validation des fichiers à partir des dtd

    try {
      SAXParser parser = factory.newSAXParser();

      // Récupération des nouveaux utilisateur sous forme d'objet
      File fileUserOperations = new File(inputFolder + "/"
          + userOperations);
      UserParser SAXParser = new UserParser(this);
      parser.parse(fileUserOperations, SAXParser);

      // Récupération des nouvelles activités sous forme d'objet
      File fileActivitiesOperations = new File(inputFolder + "/"
          + activitiesOperations);
      ActivityParser activityParser = new ActivityParser(this);
      parser.parse(fileActivitiesOperations, activityParser);

      // Récupération des nouveaux avis sous forme d'objet
      File fileAvisOperations = new File(inputFolder + "/"
          + avisOperations);
      AvisParser avisParser = new AvisParser(this);
      parser.parse(fileAvisOperations, avisParser);

      for (User user : this.getUsersToCreate()) {
        System.out.println(user);
      }
      for (Activity activity : this.getActivitiesToCreate()) {
        System.out.println(activity);
      }

      for (Avis avis : this.getAvisToCreate()) {
        System.out.println(avis);
      }

      System.out.println("User à supprimer : "
          + this.getUsersToDelete().size()
          + ", activités à supprimer : "
          + this.getActivitiesToDelete().size()
          + ", Avis à supprimer : " + this.getAvisToDelete().size());

    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  //Enregistre les données chargés dans le fichier database avec DOM
  public void saveToDatabaseFile() {
    // On ajoute les nouveaux utilisateurs au document "database"
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);

    try {
      File file = new File(outputFolder + "/" + database);

      DocumentBuilder db = dbf.newDocumentBuilder();
      Document d = db.parse(file);

      Element documentElement = d.getDocumentElement();

      int compteur;
      int iteratorCompteur;

      // On crée les nouveaux utilisateurs, avis et activités
      Element listeUsers = (Element) documentElement
          .getElementsByTagName("database:listeUsers").item(0);

      compteur = Integer.parseInt(listeUsers.getAttribute("cptUsers"));
      iteratorCompteur = 0;
      for (User user : this.getUsersToCreate()) {
        iteratorCompteur++;
        Element newUser = user.transformToElement(d, compteur
            + iteratorCompteur);
        listeUsers.appendChild(newUser);
      }

      listeUsers.setAttribute("cptUsers", (compteur + iteratorCompteur)
          + "");

      Element listeActivites = (Element) documentElement
          .getElementsByTagName("database:listeActivites").item(0);

      compteur = Integer.parseInt(listeActivites
          .getAttribute("cptActivites"));
      iteratorCompteur = 0;
      for (Activity activity : this.getActivitiesToCreate()) {
        iteratorCompteur++;
        Element newActivity = activity.transformToElement(d, compteur
            + iteratorCompteur);
        listeActivites.appendChild(newActivity);
      }

      listeActivites.setAttribute("cptActivites",
          (compteur + iteratorCompteur) + "");

      Element listeAvis = (Element) documentElement.getElementsByTagName(
          "database:listeAvis").item(0);

      compteur = Integer.parseInt(listeAvis.getAttribute("cptAvis"));
      iteratorCompteur = 0;
      for (Avis avis : this.getAvisToCreate()) {
        iteratorCompteur++;
        Element newAvis = avis.transfortToElement(d, compteur
            + iteratorCompteur);
        listeAvis.appendChild(newAvis);
      }
      listeAvis.setAttribute("cptAvis", (compteur + iteratorCompteur)
          + "");

      // On enlève les éléments à supprimer
      for (int i = 0; i < listeUsers.getChildNodes().getLength(); i++) {
        Node n = listeUsers.getChildNodes().item(i);
        if (!n.getNodeName().equals("#text")) {
          Element currentElement = (Element) n;

          String ID = currentElement.getAttribute("utilisateurID");

          if (this.usersToDelete.contains(ID)) {
            System.out.println("User supprimé n°" + ID);
            listeUsers.removeChild(currentElement);
          }
        }
      }

      for (int i = 0; i < listeActivites.getChildNodes().getLength(); i++) {
        Node n = listeActivites.getChildNodes().item(i);
        if (!n.getNodeName().equals("#text")) {
          Element currentElement = (Element) n;

          String ID = currentElement.getAttribute("ActiviteID");

          if (this.activitiesToDelete.contains(ID)) {
            System.out.println("Activité supprimé n°" + ID);
            listeActivites.removeChild(currentElement);
          }
        }
      }

      for (int i = 0; i < listeAvis.getChildNodes().getLength(); i++) {
        Node n = listeAvis.getChildNodes().item(i);
        if (!n.getNodeName().equals("#text")) {
          Element currentElement = (Element) n;

          String ID = currentElement.getAttribute("AvisID");

          if (this.avisToDelete.contains(ID)) {
            System.out.println("Avis supprimé n°" + ID);
            listeAvis.removeChild(currentElement);
          }
        }
      }

      // On enregistre le nouveau document
      TransformerFactory tf = TransformerFactory.newInstance();
      Transformer transformer = tf.newTransformer();

      transformer.transform(new DOMSource(d), new StreamResult(file));

    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (TransformerConfigurationException e) {
      e.printStackTrace();
    } catch (TransformerException e) {
      e.printStackTrace();
    }
  }
 
  //Crée les pages web avec les différents fichiers XSLT
  public void parseWithXSLT(){
    TransformerFactory fabriqueT = TransformerFactory.newInstance();
   
    try {
      StreamSource XMLSource = new StreamSource(outputFolder+"/"+database);
     
      StreamResult resultActivite = new StreamResult(new File(viewFolder+"/"+"activites.html"));
      StreamResult resultUser = new StreamResult(new File(viewFolder+"/"+"users.html"));
     
      Transformer transformerActivite = fabriqueT.newTransformer(new StreamSource(viewFolder+"/"+activiteXSLT));
      Transformer transformerUser = fabriqueT.newTransformer(new StreamSource(viewFolder+"/"+userXSLT));
     
      transformerActivite.transform(XMLSource, resultActivite);
     
      transformerUser.transform(XMLSource, resultUser);
     
    } catch (TransformerConfigurationException e) {
      e.printStackTrace();
    } catch (TransformerException e) {
      e.printStackTrace();
    }
  }

  public Collection<User> getUsersToCreate() {
    return usersToCreate;
  }

  public void setUsersToCreate(Collection<User> usersToCreate) {
    this.usersToCreate = usersToCreate;
  }

  public Collection<Activity> getActivitiesToCreate() {
    return activitiesToCreate;
  }

  public void setActivitiesToCreate(Collection<Activity> activitiesToCreate) {
    this.activitiesToCreate = activitiesToCreate;
  }

  public Collection<String> getUsersToDelete() {
    return usersToDelete;
  }

  public void setUsersToDelete(Collection<String> usersToDelete) {
    this.usersToDelete = usersToDelete;
  }

  public Collection<String> getActivitiesToDelete() {
    return activitiesToDelete;
  }

  public void setActivitiesToDelete(Collection<String> activitiesToDelete) {
    this.activitiesToDelete = activitiesToDelete;
  }

  public Collection<Avis> getAvisToCreate() {
    return avisToCreate;
  }

  public void setAvisToCreate(Collection<Avis> avisToCreate) {
    this.avisToCreate = avisToCreate;
  }

  public Collection<String> getAvisToDelete() {
    return avisToDelete;
  }

  public void setAvisToDelete(Collection<String> avisToDelete) {
    this.avisToDelete = avisToDelete;
  }
}
TOP

Related Classes of Main.MainProgram

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.